home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / lib / ubiquity / plugins / ubi-language.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-10-28  |  16KB  |  457 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import re
  6. import locale
  7. import debconf
  8. import PyICU
  9. from ubiquity.plugin import *
  10. from ubiquity import i18n, misc
  11. NAME = 'language'
  12. AFTER = None
  13. WEIGHT = 10
  14. _release_notes_url_path = '/cdrom/.disk/release_notes_url'
  15.  
  16. class PageBase(PluginUI):
  17.     
  18.     def set_language_choices(self, choices, choice_map):
  19.         '''Called with language choices and a map to localised names.'''
  20.         self.language_choice_map = dict(choice_map)
  21.  
  22.     
  23.     def set_language(self, language):
  24.         '''Set the current selected language.'''
  25.         pass
  26.  
  27.     
  28.     def get_language(self):
  29.         '''Get the current selected language.'''
  30.         return 'C'
  31.  
  32.     
  33.     def set_oem_id(self, text):
  34.         pass
  35.  
  36.     
  37.     def get_oem_id(self):
  38.         return ''
  39.  
  40.  
  41.  
  42. class PageGtk(PageBase):
  43.     plugin_is_language = True
  44.     
  45.     def __init__(self, controller, *args, **kwargs):
  46.         self.controller = controller
  47.         if self.controller.oem_user_config:
  48.             ui_file = 'stepLanguageOnly.ui'
  49.             self.only = True
  50.         else:
  51.             ui_file = 'stepLanguage.ui'
  52.             self.only = False
  53.         
  54.         try:
  55.             import gtk as gtk
  56.             builder = gtk.Builder()
  57.             builder.add_from_file('/usr/share/ubiquity/gtk/%s' % ui_file)
  58.             builder.connect_signals(self)
  59.             self.page = builder.get_object('stepLanguage')
  60.             self.iconview = builder.get_object('language_iconview')
  61.             self.treeview = builder.get_object('language_treeview')
  62.             self.oem_id_entry = builder.get_object('oem_id_entry')
  63.             if self.controller.oem_config:
  64.                 builder.get_object('oem_id_vbox').show()
  65.             
  66.             release_notes_vbox = builder.get_object('release_notes_vbox')
  67.             if release_notes_vbox:
  68.                 
  69.                 try:
  70.                     release_notes_url = builder.get_object('release_notes_url')
  71.                     release_notes = open(_release_notes_url_path)
  72.                     release_notes_url.set_uri(release_notes.read().rstrip('\n'))
  73.                     release_notes.close()
  74.                 except (KeyboardInterrupt, SystemExit):
  75.                     raise 
  76.                 except:
  77.                     None<EXCEPTION MATCH>(KeyboardInterrupt, SystemExit)
  78.                     release_notes_vbox.hide()
  79.                 
  80.  
  81.             None<EXCEPTION MATCH>(KeyboardInterrupt, SystemExit)
  82.         except Exception:
  83.             e = None
  84.             self.debug('Could not create language page: %s', e)
  85.             self.page = None
  86.  
  87.         self.plugin_widgets = self.page
  88.  
  89.     
  90.     def set_language_choices(self, choices, choice_map):
  91.         import gtk
  92.         import gobject as gobject
  93.         PageBase.set_language_choices(self, choices, choice_map)
  94.         list_store = gtk.ListStore(gobject.TYPE_STRING)
  95.         for choice in choices:
  96.             list_store.append([
  97.                 choice])
  98.         
  99.         if self.only:
  100.             self.iconview.set_model(list_store)
  101.             self.iconview.set_text_column(0)
  102.         elif len(self.treeview.get_columns()) < 1:
  103.             column = gtk.TreeViewColumn(None, gtk.CellRendererText(), text = 0)
  104.             column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
  105.             self.treeview.append_column(column)
  106.             selection = self.treeview.get_selection()
  107.             selection.connect('changed', self.on_language_selection_changed)
  108.         
  109.         self.treeview.set_model(list_store)
  110.  
  111.     
  112.     def set_language(self, language):
  113.         if self.only:
  114.             model = self.iconview.get_model()
  115.             iterator = model.iter_children(None)
  116.             while iterator is not None:
  117.                 if unicode(model.get_value(iterator, 0)) == language:
  118.                     path = model.get_path(iterator)
  119.                     self.iconview.select_path(path)
  120.                     self.iconview.scroll_to_path(path, True, 0.5, 0.5)
  121.                     break
  122.                 
  123.                 iterator = model.iter_next(iterator)
  124.         else:
  125.             model = self.treeview.get_model()
  126.             iterator = model.iter_children(None)
  127.             while iterator is not None:
  128.                 if unicode(model.get_value(iterator, 0)) == language:
  129.                     path = model.get_path(iterator)
  130.                     self.treeview.get_selection().select_path(path)
  131.                     self.treeview.scroll_to_cell(path, use_align = True, row_align = 0.5)
  132.                     break
  133.                 
  134.                 iterator = model.iter_next(iterator)
  135.  
  136.     
  137.     def get_language(self):
  138.         if self.only:
  139.             model = self.iconview.get_model()
  140.             items = self.iconview.get_selected_items()
  141.             if not items:
  142.                 return 'C'
  143.             iterator = model.get_iter(items[0])
  144.         else:
  145.             selection = self.treeview.get_selection()
  146.             (model, iterator) = selection.get_selected()
  147.         if iterator is None:
  148.             return 'C'
  149.         value = unicode(model.get_value(iterator, 0))
  150.         return self.language_choice_map[value][1]
  151.  
  152.     
  153.     def on_language_activated(self, *args, **kwargs):
  154.         self.controller.go_forward()
  155.  
  156.     
  157.     def on_language_selection_changed(self, *args, **kwargs):
  158.         lang = self.get_language()
  159.         if lang:
  160.             lang = lang.split('.')[0].lower()
  161.             self.controller.translate(lang)
  162.         
  163.  
  164.     
  165.     def set_oem_id(self, text):
  166.         return self.oem_id_entry.set_text(text)
  167.  
  168.     
  169.     def get_oem_id(self):
  170.         return self.oem_id_entry.get_text()
  171.  
  172.  
  173.  
  174. class PageKde(PageBase):
  175.     plugin_breadcrumb = 'ubiquity/text/breadcrumb_language'
  176.     plugin_is_language = True
  177.     
  178.     def __init__(self, controller, *args, **kwargs):
  179.         self.controller = controller
  180.         
  181.         try:
  182.             uic = uic
  183.             import PyQt4
  184.             SIGNAL = SIGNAL
  185.             import PyQt4.QtCore
  186.             QLabel = QLabel
  187.             import PyQt4.QtGui
  188.             self.page = uic.loadUi('/usr/share/ubiquity/qt/stepLanguage.ui')
  189.             self.combobox = self.page.language_combobox
  190.             self.combobox.currentIndexChanged[str].connect(self.on_language_selection_changed)
  191.             if not self.controller.oem_config:
  192.                 self.page.oem_id_label.hide()
  193.                 self.page.oem_id_entry.hide()
  194.             
  195.             
  196.             class linkLabel((QLabel,)):
  197.                 
  198.                 def __init__(self, wizard, parent):
  199.                     QLabel.__init__(self, parent)
  200.                     self.wizard = wizard
  201.  
  202.                 
  203.                 def mouseReleaseEvent(self, event):
  204.                     self.wizard.openReleaseNotes()
  205.  
  206.                 
  207.                 def setText(self, text):
  208.                     QLabel.setText(self, text)
  209.                     self.resize(self.sizeHint())
  210.  
  211.  
  212.             self.release_notes_url = linkLabel(self, self.page.release_notes_frame)
  213.             self.release_notes_url.setObjectName('release_notes_url')
  214.             self.release_notes_url.show()
  215.             self.release_notes_url_template = None
  216.             
  217.             try:
  218.                 release_notes = open(_release_notes_url_path)
  219.                 self.release_notes_url_template = release_notes.read().rstrip('\n')
  220.                 release_notes.close()
  221.             except (KeyboardInterrupt, SystemExit):
  222.                 raise 
  223.             except:
  224.                 self.page.release_notes_label.hide()
  225.                 self.page.release_notes_frame.hide()
  226.  
  227.         except Exception:
  228.             e = None
  229.             self.debug('Could not create language page: %s', e)
  230.             self.page = None
  231.  
  232.         self.plugin_widgets = self.page
  233.  
  234.     
  235.     def openReleaseNotes(self):
  236.         lang = self.selected_language()
  237.         if lang:
  238.             lang = lang.split('.')[0].lower()
  239.             url = self.release_notes_url_template.replace('${LANG}', lang)
  240.             self.openURL(url)
  241.         
  242.  
  243.     
  244.     def openURL(self, url):
  245.         misc.execute('su', '-c', 'xhost +localhost', 'ubuntu')
  246.         misc.execute('su', '-c', 'kfmclient openURL ' + url, 'ubuntu')
  247.  
  248.     
  249.     def set_language_choices(self, choices, choice_map):
  250.         QString = QString
  251.         import PyQt4.QtCore
  252.         PageBase.set_language_choices(self, choices, choice_map)
  253.         self.combobox.clear()
  254.         for choice in choices:
  255.             self.combobox.addItem(QString(unicode(choice)))
  256.         
  257.  
  258.     
  259.     def set_language(self, language):
  260.         QString = QString
  261.         import PyQt4.QtCore
  262.         index = self.combobox.findText(QString(unicode(language)))
  263.         if index < 0:
  264.             self.combobox.addItem('C')
  265.         else:
  266.             self.combobox.setCurrentIndex(index)
  267.  
  268.     
  269.     def get_language(self):
  270.         lang = self.selected_language()
  271.         if lang:
  272.             return lang
  273.         return 'C'
  274.  
  275.     
  276.     def selected_language(self):
  277.         lang = self.combobox.currentText()
  278.         if lang.isNull():
  279.             return None
  280.         return self.language_choice_map[unicode(lang)][1]
  281.  
  282.     
  283.     def on_language_selection_changed(self):
  284.         lang = self.selected_language()
  285.         if lang:
  286.             lang = lang.split('.')[0].lower()
  287.             self.controller.translate(lang)
  288.             if self.release_notes_url_template is not None:
  289.                 url = self.release_notes_url_template.replace('${LANG}', lang)
  290.                 text = i18n.get_string('release_notes_url', lang)
  291.                 self.release_notes_url.setText('<a href="%s">%s</a>' % (url, text))
  292.             
  293.         
  294.  
  295.     
  296.     def set_oem_id(self, text):
  297.         return self.page.oem_id_entry.setText(text)
  298.  
  299.     
  300.     def get_oem_id(self):
  301.         return unicode(self.page.oem_id_entry.text())
  302.  
  303.  
  304.  
  305. class PageDebconf(PageBase):
  306.     plugin_title = 'ubiquity/text/language_heading_label'
  307.  
  308.  
  309. class PageNoninteractive(PageBase):
  310.     
  311.     def __init__(self, controller, *args, **kwargs):
  312.         self.controller = controller
  313.  
  314.     
  315.     def set_language(self, language):
  316.         '''Set the current selected language.'''
  317.         self.language = self.language_choice_map[language][1]
  318.  
  319.     
  320.     def get_language(self):
  321.         '''Get the current selected language.'''
  322.         return self.language
  323.  
  324.  
  325.  
  326. class Page(Plugin):
  327.     
  328.     def prepare(self, unfiltered = False):
  329.         self.language_question = None
  330.         self.initial_language = None
  331.         self.db.fset('localechooser/languagelist', 'seen', 'false')
  332.         
  333.         try:
  334.             os.unlink('/var/lib/localechooser/preseeded')
  335.             os.unlink('/var/lib/localechooser/langlevel')
  336.         except OSError:
  337.             pass
  338.  
  339.         if self.ui.controller.oem_config:
  340.             
  341.             try:
  342.                 self.ui.set_oem_id(self.db.get('oem-config/id'))
  343.             except debconf.DebconfError:
  344.                 pass
  345.             except:
  346.                 None<EXCEPTION MATCH>debconf.DebconfError
  347.             
  348.  
  349.         None<EXCEPTION MATCH>debconf.DebconfError
  350.         questions = [
  351.             'localechooser/languagelist']
  352.         environ = {
  353.             'PATH': '/usr/lib/ubiquity/localechooser:' + os.environ['PATH'] }
  354.         if 'UBIQUITY_FRONTEND' in os.environ and os.environ['UBIQUITY_FRONTEND'] == 'debconf_ui':
  355.             environ['TERM_FRAMEBUFFER'] = '1'
  356.         else:
  357.             environ['OVERRIDE_SHOW_ALL_LANGUAGES'] = '1'
  358.         return ([
  359.             '/usr/lib/ubiquity/localechooser/localechooser'], questions, environ)
  360.  
  361.     
  362.     def run(self, priority, question):
  363.         if question == 'localechooser/languagelist':
  364.             self.language_question = question
  365.             if self.initial_language is None:
  366.                 self.initial_language = self.db.get(question)
  367.             
  368.             current_language_index = self.value_index(question)
  369.             current_language = 'English'
  370.             import gzip as gzip
  371.             languagelist = gzip.open('/usr/lib/ubiquity/localechooser/languagelist.data.gz')
  372.             language_display_map = { }
  373.             i = 0
  374.             for line in languagelist:
  375.                 line = unicode(line, 'utf-8')
  376.                 if line == '' or line == '\n':
  377.                     continue
  378.                 
  379.                 (code, name, trans) = line.strip(u'\n').split(u':')[1:]
  380.                 if code in ('dz', 'km'):
  381.                     i += 1
  382.                     continue
  383.                 
  384.                 language_display_map[trans] = (name, code)
  385.                 if i == current_language_index:
  386.                     current_language = trans
  387.                 
  388.                 i += 1
  389.             
  390.             languagelist.close()
  391.             
  392.             try:
  393.                 collator = PyICU.Collator.createInstance(PyICU.Locale('C'))
  394.             except:
  395.                 collator = None
  396.  
  397.             
  398.             def compare_choice(x):
  399.                 if language_display_map[x][1] == 'C':
  400.                     return None
  401.                 return x
  402.  
  403.             sorted_choices = sorted(language_display_map, key = compare_choice)
  404.             self.ui.set_language_choices(sorted_choices, language_display_map)
  405.             self.ui.set_language(current_language)
  406.         
  407.         return Plugin.run(self, priority, question)
  408.  
  409.     
  410.     def cancel_handler(self):
  411.         self.ui.controller.translate(just_me = False)
  412.         Plugin.cancel_handler(self)
  413.  
  414.     
  415.     def ok_handler(self):
  416.         if self.language_question is not None:
  417.             new_language = self.ui.get_language()
  418.             self.preseed(self.language_question, new_language)
  419.             if self.initial_language is None or self.initial_language != new_language:
  420.                 self.db.reset('debian-installer/country')
  421.             
  422.         
  423.         if self.ui.controller.oem_config:
  424.             self.preseed('oem-config/id', self.ui.get_oem_id())
  425.         
  426.         Plugin.ok_handler(self)
  427.  
  428.     
  429.     def cleanup(self):
  430.         Plugin.cleanup(self)
  431.         i18n.reset_locale()
  432.         self.ui.controller.translate(just_me = False, reget = True)
  433.  
  434.  
  435.  
  436. class Install(InstallPlugin):
  437.     
  438.     def prepare(self, unfiltered = False):
  439.         if 'UBIQUITY_OEM_USER_CONFIG' in os.environ:
  440.             return ([
  441.                 '/usr/lib/ubiquity/localechooser-apply'], [])
  442.         return ([
  443.             'sh',
  444.             '-c',
  445.             '/usr/lib/ubiquity/localechooser/post-base-installer ' + '&& /usr/lib/ubiquity/localechooser/finish-install'], [])
  446.  
  447.     
  448.     def install(self, target, progress, *args, **kwargs):
  449.         progress.info('ubiquity/install/locales')
  450.         rv = InstallPlugin.install(self, target, progress, *args, **kwargs)
  451.         if not rv:
  452.             misc.execute('chroot', target, 'fontconfig-voodoo', '--auto', '--force', '--quiet')
  453.         
  454.         return rv
  455.  
  456.  
  457.